package cn.iocoder.yudao.module.enterprise.service.account;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.enterprise.controller.admin.account.vo.*;
import cn.iocoder.yudao.module.enterprise.dal.dataobject.account.AccountSourceDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 碳排放核算和排放源关联 Service 接口
 *
 * @author StevenShen
 */
public interface AccountSourceService {

    /**
     * 创建碳排放核算和排放源关联
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createAccountSource(@Valid AccountSourceCreateReqVO createReqVO);

    /**
     * 更新碳排放核算和排放源关联
     *
     * @param updateReqVO 更新信息
     */
    void updateAccountSource(@Valid AccountSourceUpdateReqVO updateReqVO);

    /**
     * 删除碳排放核算和排放源关联
     *
     * @param id 编号
     */
    void deleteAccountSource(Long id);

    /**
     * 获得碳排放核算和排放源关联分页
     *
     * @param pageReqVO 分页查询
     * @return 碳排放核算和排放源关联分页
     */
    PageResult<AccountSourceRespVO> getAccountSourcePage(AccountSourcePageReqVO pageReqVO);


    /**
     * 获得排放源的排放总量
     *
     * @param reqVO 排放源信息
     * @return 排放总量
     */
    Double getEmissionAccount(@Valid AccountEmissionReqVO reqVO);

    /**
     * 获取碳排放核算和排放源关联列表
     *
     * @param accountId 核算ID
     * @return 碳排放核算和排放源关联列表
     */
    List<AccountSourceDO> getAccountSourceListByAccountId(Long accountId);

    /**
     * 获取碳排放核算的排放源详情列表
     *
     * @param accountId 核算ID
     * @return 碳排放核算的排放源详情列表
     */
    List<AccountSourceDetailRespVO> getAccountSourceDetailList(Long accountId);

    /**
     * 获取碳排放仿真的排放情况列表
     *
     * @param sourceSimulationList 排放源列表
     * @return 碳排放仿真的排放情况列表
     */
    AccountSimulationRespVO simulationAccount(List<AccountSimulationReqVO.SourceSimulation> sourceSimulationList);

}
